package com.carlo.service.impl;

import java.util.List;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.HtmlEmail;

import com.carlo.bean.MailCfg;
import com.carlo.service.ISend;

/**
 * 
* @ClassName: SmtpSendImpl 
* @Description: 使用smtp协议发送邮件 
* 				注：使用 qq邮箱 或  163邮箱 发送邮件时，密码为授权码。
* @author carlo
* @date 2018年2月24日 下午5:45:46
 */
public class SmtpSendImpl implements ISend {

	public void send(MailCfg mailCfg, String subject, String body,
			List<String> tos, List<String> ccs, List<String> attachments)
			throws Exception {
		if (null == tos || tos.isEmpty()) {
			throw new Exception("收件人列表不能为空");
		}
		HtmlEmail mail = new HtmlEmail();
		// 设置发送者的邮箱地址和密码(密码填写的是授权码)
		mail.setHostName(mailCfg.getServer_name());
		mail.setAuthentication(mailCfg.getAccount(), mailCfg.getPwd());
		mail.setFrom(mailCfg.getAccount());// 设置发送者的邮件
		mail.setSmtpPort(Integer.valueOf(mailCfg.getPort()));
		// 设置安全连接
		mail.setSSLOnConnect(true);
		// 设置主题
		mail.setSubject(subject);
		// 处理乱码问题
		mail.setCharset("utf-8");
		mail.setHtmlMsg("<html>" + body + "</html>");
		// 设置接收者邮件
		mail.addTo(tos.toArray(new String[tos.size()]));
		// 抄送
		if (null != ccs && !ccs.isEmpty()) {
			mail.addCc(ccs.toArray(new String[ccs.size()]));
		}
		// 附件
		if (null != attachments && attachments.size() > 0) {
			for (String attsFile : attachments) {
				EmailAttachment ea = new EmailAttachment();
				// 附件内容 path是磁盘本地文件路径和名称
				ea.setPath(attsFile);
				// 表示当前设置的是附件
				ea.setDisposition(EmailAttachment.ATTACHMENT);
				// ea.setDescription("附件描述");
				int index = attsFile.lastIndexOf("/");
				ea.setName(attsFile.substring(index + 1));
				mail.attach(ea);
			}
		}

		// 发送邮件
		mail.send();
	}

}
